RIの費用の一覧CSVをスクリプトで取得する
はじめに
こんにちは、たけかわです。
リザーブドインスタンス(RI)、お客様の依頼で購入することが多いのですが、購入前に見積りを要望されることも多いです。最近、RIの費用を調べることがコマンドラインで出来るという話をききました。さらに先日、【小ネタ】aws-cliでEC2マネージメントコンソールの内容をCSVに出力する記事にてCSVフォーマットが出力できるという話もありましたので、東京リージョンでのRIの価格の一覧CSVを作成するスクリプトを作ってみました。
スクリプトについて
TODAY=`date '+%Y%m%d'` aws ec2 describe-reserved-instances-offerings > RI${TODAY}.json cat RI${TODAY}.json | jq -r '.ReservedInstancesOfferings[] | [ .OfferingType // "", .AvailabilityZone // "", .InstanceTenancy // "", .ProductDescription // "", .RecurringCharges[].Amount // .UsagePrice // "", .FixedPrice // "", .Duration // "", .InstanceType ] | @csv ' > RI${TODAY}.csv
今日の日付の.jsonファイルと.csvファイルを作成してくれます。スクリプトのポイントとしては.RecurringCharges[].Amount // .UsagePrice // "",の部分です。重度RIとそれ以外の(軽度、中度の)RIではランニングの費用の計算方式がちがうことからカラムも分けられています。具体的に言うと重度RIは起動/停止に関係なく課金されるためReccuring配列中のAmountというレコードに価格が入っています。軽度/中度については起動した時のみの課金のためUnitPriceというレコードになっています。私が計算する時はこの違いはあまり気にしないので、今回はCSVの同じカラムに入るようにしています。
実行方法
AWSCLI、jqをつかっています。AWSCLIはこちらよりダウンロードしてインストールします。jqはyumでもインストールできますが、公式のダウンロードサイトからもインストールできます。Windows版もあります。
インストール後、必要であれば、AWSにアクセスするためのアクセスキーとシークレットキー、リージョン(東京でしたらap-northeast-1)を設定します。
$ aws configure AWS Access Key ID []: アクセスキーを入力する! AWS Secret Access Key []: シークレットキーを入力する! Default region name []: ap-northeast-1 Default output format [None]:
では早速実行してみましょう。スクリプトを修正してtimeコマンドを追加後、コピーアンドペーストして時間もはかってみました。
$ TODAY=`date '+%Y%m%d'` $ time aws ec2 describe-reserved-instances-offerings > RI${TODAY}.json $ cat RI${TODAY}.json | jq -r '.ReservedInstancesOfferings[] | [ .OfferingType // "", .AvailabilityZone // "", .InstanceTenancy // "", .ProductDescription // "", .RecurringCharges[].Amount // .UsagePrice // "", .FixedPrice // "", .Duration // "", .InstanceType ] | @csv ' > RI${TODAY}.csv real 0m24.520s user 0m1.778s sys 0m0.294s $ ls RI20140724.csv RI20140724.json
意外に時間がかかりました。RI取得に20秒もかかるのが不思議だったのですが、行数を確認したところ納得でした。
$ wc -l RI20140724.csv 4371 RI20140724.csv
1リージョンだけでも4400個近いRIがあるのですね。。。
まとめ
RIの一覧をCSVで取得するスクリプトをつくって実行してみました。RIの数の多さに驚きでした。でも、これってRDSはいっていないんですよね、ここは次回への改善点ということで。。。
ではでは。